﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swcommands;
using SolidWorks.Interop.swconst;
using SolidWorks.Interop.swpublished;

using System.Runtime.InteropServices;

using SwAddinHelpers.TaskPane;
using SwAddinHelpers.PropertyManager;
using SwAddinHelpers.CommandManager;
using SwAddinHelpers.MenuManager;
using SwAddinHelpers.Sinks;
using SwAddinHelpers.Base;
using SwAddinHelpers.FeatureView;
using SwAddinHelpers.ComHelpers;
using System.ComponentModel.Composition.Hosting;

namespace SwAddinHelpers.Contracts
{
    [ComVisible(true)]
    public interface ISwAddinBase
    {
        SldWorks SolidWorksApplication { get; }
        int Cookie { get; }
        swAppEventSink MainAppEventSink { get; }
        CompositionContainer compositionContainer { get; set; }
        List<UserControlHostBase> HostCollection { get; }
        CallbackPool CallbackPool { get; }
        CommandManagerHost CommandManagerHost { get; }
        MenuManagerHost MenuManagerHost { get; }

        UserControlHostBase RetrieveUIHostByProgId(string ProgId);
        void ActivatePropertyPageHost();
        void ThrowUnhandledException(Exception e);

        string DUMMYFILE { get; }
        string DUMMYBMP { get; }

        ISwAddinBaseDebug Debug { get; }

        bool IsWindowsXP { get; }
    }

    public interface ISwAddinBaseDebug
    {
        bool loadTP {get; set;}
        bool loadForms { get; set; }
        bool loadFV { get; set; }
        bool loadPMP { get; set; }
        bool loadMV { get; set; }
        bool loadMenu { get; set; }
        bool loadCommand { get; set; }
        bool buildProxy1 { get; set; }
        void ContinueLoadingAddin();
        bool IsDebuggerAttached { get; set; }
        bool Is0wned { get; set; }
        SwAddinHelpers.AddinManager.DebugManager Manager { get; }
    }

    public interface IExternalUserControl
    {
        dynamic ExternalUserControl { get; }
    }

    public interface IExternalCallback
    {
        dynamic ExternalCallbackContainer { get; }
        ISwAddinBase OwnerAddin { get; }
    }

}
